package leetcode;

/**
 * 给你一个非负整数 num ，请你返回将它变成 0 所需要的步数。 如果当前数字是偶数，你需要把它除以 2 ；否则，减去 1 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/number-of-steps-to-reduce-a-number-to-zero
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 *
 * @author Europa
 */
public class Num1342 {

    public int numberOfSteps (int num) {
        // 操作总次数
        int count = 0;
        while (num > 0) {
            // &运算: 同1为1, 其余为0. 二进制最后一位数为0, 表示能被2除尽
            int remainder = num & 1;
            // 奇数-1, 偶数直接除2
            if (remainder == 0) {
                num /= 2;
            } else {
                num--;
            }
            count++;
        }
        return count;
    }

    public static void main(String[] args) {
        Num1342 num1342 = new Num1342();
        int num = 14;
        int i = num1342.numberOfSteps(num);
        System.out.println(i);
    }
}
